home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Camelot / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].zip / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].adf / MSH / src / hanreq.c < prev    next >
C/C++ Source or Header  |  1990-06-17  |  3KB  |  137 lines

  1. /*-
  2.  * $Id: hanreq.c,v 1.30 90/06/04 23:17:48 Rhialto Rel $
  3.  * $Log:    hanreq.c,v $
  4.  * Revision 1.30  90/06/04  23:17:48  Rhialto
  5.  * Release 1 Patch 3
  6.  * 
  7.  *  HANREQ.C
  8.  *
  9.  *  The code for the messydos file system handler.
  10.  *
  11.  *  Read/Write error requesters.
  12.  *
  13.  *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May
  14.  *  not be used or copied without a licence.
  15. -*/
  16.  
  17. #include "dos.h"
  18. #include "han.h"
  19. #include <intuition/intuition.h>
  20.  
  21. #ifdef HDEBUG
  22. #   define    debug(x)  dbprintf x
  23. #else
  24. #   define    debug(x)
  25. #endif
  26.  
  27. short        Cancel = 0;    /* Cancel all R/W errors */
  28.  
  29. static struct IntuiText Positive = {
  30.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  31.     AUTOLEFTEDGE, AUTOTOPEDGE, AUTOITEXTFONT,
  32.     (UBYTE *)"Retry",
  33.     AUTONEXTTEXT
  34. };
  35.  
  36. static struct IntuiText Negative = {
  37.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  38.     AUTOLEFTEDGE, AUTOTOPEDGE, AUTOITEXTFONT,
  39.     (UBYTE *)"Cancel",
  40.     AUTONEXTTEXT
  41. };
  42.  
  43. static struct IntuiText RwError[] = {
  44.     {
  45.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  46.     16,          5,       AUTOITEXTFONT,
  47.     (UBYTE *)"Messydos volume",
  48.     &RwError[1]
  49.     },
  50.     {
  51.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  52.     16,          15,       AUTOITEXTFONT,
  53.     (UBYTE *)NULL,
  54.     &RwError[2]
  55.     },
  56.     {
  57.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  58.     16,          25,       AUTOITEXTFONT,
  59.     (UBYTE *)"has a Read or Write error",
  60.     NULL
  61.     },
  62. };
  63.  
  64. struct IntuiText MustReplace[] = {
  65.     {
  66.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  67.     16,          5,       AUTOITEXTFONT,
  68.     (UBYTE *)"You MUST!! replace messy volume",
  69.     &MustReplace[1]
  70.     },
  71.     {
  72.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  73.     16,          15,       AUTOITEXTFONT,
  74.     (UBYTE *)NULL,
  75.     &MustReplace[2]
  76.     },
  77.     {
  78.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  79.     16,          25,       AUTOITEXTFONT,
  80.     (UBYTE *)"in that floppy drive !!",
  81.     NULL
  82.     },
  83. };
  84.  
  85. long
  86. RetryRwError(req)
  87. struct IOExtTD *req;
  88. {
  89.     register struct Window *window;
  90.     struct IntuiText *text;
  91.     long        result;
  92.  
  93.     if (Cancel)
  94.     goto fail;
  95.  
  96.     if (DosPacket != NULL) { /* A user-requested action */
  97.     struct MsgPort *port;
  98.     struct Process *proc;
  99.  
  100.     port = DosPacket->dp_Port;
  101.     if ((port->mp_Flags & PF_ACTION) != PA_SIGNAL)
  102.         goto fail;
  103.     proc = (struct Process *)port->mp_SigTask;
  104.     if (proc->pr_Task.tc_Node.ln_Type != NT_PROCESS)
  105.         goto fail;
  106.     window = (struct Window *)proc->pr_WindowPtr;
  107.     if (window == (struct Window *)-1)
  108.         goto fail;
  109.     } else
  110.     window = NULL;
  111.  
  112.     if (req->iotd_Req.io_Error == TDERR_DiskChanged) {
  113.     text = MustReplace;
  114.     DiskChanged = 0;
  115.     } else
  116.     text = RwError;
  117.  
  118.     if (VolNode)
  119.     text[1].IText = (UBYTE *)BTOC(VolNode->dl_Name)+1;
  120.     else
  121.     text[1].IText = (UBYTE *)"";
  122.  
  123. again:
  124.     result = AutoRequest(window, text, &Positive, &Negative,
  125.              0L, 0L, 320L, 72L);
  126.  
  127.     if (req->iotd_Req.io_Error == TDERR_DiskChanged && result != FALSE) {
  128.     TDChangeNum();  /* Get new disk change number */
  129.     DiskChanged = 0;
  130.     }
  131.  
  132.     return result;
  133.  
  134. fail:
  135.     return FALSE;
  136. }
  137.